/*************************************************************************
    > File Name: C.Solving_Zombie_Method_one.c
    > Author: Ykk
    > Mail: 3393579535@qq.com 
    > Created Time: 2023年05月03日 星期三 21时31分30秒
 ************************************************************************/

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#include<signal.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>

void fun(int signo)
{
	printf("捕捉到信号:%d\n",signo);
	printf("有子进程退出..\n");
}

int main()
{
	pid_t pid = -1;
	struct sigaction act;

	act.sa_handler = fun;
	act.sa_flags = 0;

	//注册信号处理函数
	sigaction(SIGCHLD,&act,NULL);
	
	//创建一个子进程
	pid = fork();
	if(-1 == pid)
	{
		perror("fork");
		return 1;
	}

	//子进程
	if(0 ==  pid)
	{
		printf("子进程休息..\n");
		sleep(2);
		printf("子进程退出..\n");
	}
	else
	{
		wait(NULL);
		//父进程
		while(1)
		{
			printf("父进程工作..\n");
			sleep(1);
		}
	}
	return 0;
}
